/*******************************************************************
 * 外语翻译平台(translate) 
 *
 * 成都一亿信息技术公司 版权所有
 * 
 * Copyright (C) 2010 Transer Information Technology Co., Ltd.
 *
 * @Version : 1.0  2011-1-9 上午01:48:16
 *
 * DateUtils.java 
 *
 *******************************************************************/
package com.transer.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * class defination are there
 * 
 * @author Mark
 * 
 * @version 1.0 ywengineer@gmail.com
 * 
 */
public class DateUtils {
	public static final String FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

	public static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";

	/**
	 * 格式化日期
	 * 
	 * @param date
	 *            日期
	 * @param format
	 *            格式
	 * @return
	 */
	public static String format(Date date, String format) {
		final SimpleDateFormat formater = new SimpleDateFormat(format);
		return formater.format(date);
	}

	/**
	 * 计算时间差
	 * 
	 * @param start
	 *            开始时间
	 * @param end
	 *            结束时间
	 * @return 相差(小时)
	 */
	public static long dateDiff(Date start, Date end) {
		int divide = 3600000;
		long diff = end.getTime() - start.getTime();
		return (diff % divide) != 0 ? diff / divide + 1 : diff / divide;
	}

	/**
	 * 解析时间
	 * 
	 * @param date
	 *            时间字符串
	 * @param format
	 *            格式
	 * @return 日期
	 */
	public static Date parseDate(String date, String format) {
		try {
			final SimpleDateFormat formater = new SimpleDateFormat(format);
			return formater.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 解析日期
	 * 
	 * @param date
	 *            日期
	 * @param format
	 *            格式
	 * @return 日期
	 */
	public static Date parseDate(Date date, String format) {
		try {
			final SimpleDateFormat formater = new SimpleDateFormat(format);
			return formater.parse(format(date, format));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 判断指定日期是否在某一时间段内
	 * 
	 * @param src
	 *            指定日期
	 * @param start
	 *            开始日期
	 * @param end
	 *            结束日期
	 * @return
	 */
	public static boolean isBetween(Date src, Date start, Date end) {
		return start.getTime() <= src.getTime() && src.getTime() <= end.getTime();
	}

	/**
	 * 判断当前时间是否在某一时间段内
	 * 
	 * @param start
	 *            开始日期
	 * @param end
	 *            结束日期
	 * @return
	 */
	public static boolean isBetween(Date start, Date end) {
		return isBetween(Calendar.getInstance().getTime(), start, end);
	}

	public static void main(String[] args) {
		Date d = org.apache.commons.lang.time.DateUtils.addDays(new Date(), 1);
		d = org.apache.commons.lang.time.DateUtils.addHours(d, 5);
		long diff = dateDiff(new Date(), d);
		System.out.println(diff);
		System.out.println(diff / 24 + "天" + diff % 24 + "小时");
		System.out.println(format(new Date(), FORMAT_YYYY_MM_DD));
		System.out.println(parseDate("2011-01-09 01:54:56", FORMAT_YYYY_MM_DD));
		System.out.println(parseDate(new Date(), FORMAT_YYYY_MM_DD));
	}
}
